/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Clases;

/**
 *
 * @author Daniel
 */
import static com.sun.corba.se.spi.presentation.rmi.StubAdapter.request;
import static com.sun.org.apache.xalan.internal.lib.ExsltDatetime.date;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpSession;

public class Actividades {
    private int idSocio;
    private int idActividad;
    private int NroSocio;
    private int idActividadSocio;
    private int idMedioPago;
    private Double Monto;
    private String FechaAlta;
    private String FechaBaja;
    private String Estado;
    private String Denominacion;
    private int NroFam;
    private int Edad;
    private String Codigo;
    private String FechaNac;
    private List lista;
    private String TipoCochera;
    private String NroCohera;
    private String TipoVeh;
    private String Marca;
    private String Patente;
    private String Modelo;

    public void setIdSocio(int idSocio) {
        this.idSocio = idSocio;
    }

    public int getIdSocio() {
        return idSocio;
    }

    public void setLista(List lista) {
        this.lista = lista;
    }

    public void setTipoCochera(String TipoCochera) {
        this.TipoCochera = TipoCochera;
    }

    public void setNroCohera(String NroCohera) {
        this.NroCohera = NroCohera;
    }

    public void setTipoVeh(String TipoVeh) {
        this.TipoVeh = TipoVeh;
    }

    public void setMarca(String Marca) {
        this.Marca = Marca;
    }

    public void setPatente(String Patente) {
        this.Patente = Patente;
    }

    public void setModelo(String Modelo) {
        this.Modelo = Modelo;
    }

    public List getLista() {
        return lista;
    }

    public String getTipoCochera() {
        return TipoCochera;
    }

    public String getNroCohera() {
        return NroCohera;
    }

    public String getTipoVeh() {
        return TipoVeh;
    }

    public String getMarca() {
        return Marca;
    }

    public String getPatente() {
        return Patente;
    }

    public String getModelo() {
        return Modelo;
    }

    public void setFechaNac(String FechaNac) {
        this.FechaNac = FechaNac;
    }

    public String getFechaNac() {
        return FechaNac;
    }

    public void setEdad(int Edad) {
        this.Edad = Edad;
    }

    public void setCodigo(String Codigo) {
        this.Codigo = Codigo;
    }

    public int getEdad() {
        return Edad;
    }

    public String getCodigo() {
        return Codigo;
    }

    public void setDenominacion(String Denominacion) {
        this.Denominacion = Denominacion;
    }

    public void setNroFam(int NroFam) {
        this.NroFam = NroFam;
    }

    public String getDenominacion() {
        return Denominacion;
    }

    public int getNroFam() {
        return NroFam;
    }

    public int getIdActividad() {
        return idActividad;
    }

    public int getNroSocio() {
        return NroSocio;
    }

    public int getIdActividadSocio() {
        return idActividadSocio;
    }

    public int getIdMedioPago() {
        return idMedioPago;
    }

    public Double getMonto() {
        return Monto;
    }

    public String getFechaAlta() {
        return FechaAlta;
    }

    public String getFechaBaja() {
        return FechaBaja;
    }

    public String getEstado() {
        return Estado;
    }

    public void setIdActividad(int idActividad) {
        this.idActividad = idActividad;
    }

    public void setNroSocio(int NroSocio) {
        this.NroSocio = NroSocio;
    }

    public void setIdActividadSocio(int idActividadSocio) {
        this.idActividadSocio = idActividadSocio;
    }

    public void setIdMedioPago(int idMedioPago) {
        this.idMedioPago = idMedioPago;
    }

    public void setMonto(Double Monto) {
        this.Monto = Monto;
    }

    public void setFechaAlta(String FechaAlta) {
        this.FechaAlta = FechaAlta;
    }

    public void setFechaBaja(String FechaBaja) {
        this.FechaBaja = FechaBaja;
    }

    public void setEstado(String Estado) {
        this.Estado = Estado;
    }
    
    public List<Socios> presentar(List<Socios> s, int idAct){
        List<Socios> soc = new ArrayList<Socios>();
        int socio, ind, i;        

         
        for (i=0; i<s.size();i++){         
        socio = s.get(i).getNroSocio();
        ind = s.get(i).getNroFam();
        Connection miCnx = ConectarBD.getConnection();
        String query = "SELECT * FROM actividadsocio WHERE nrosocio=? and NroFam=? and idActividades=?";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, socio);
            miStm.setInt(2, ind);
            miStm.setInt(3, idAct);            
            miRs = miStm.executeQuery();        
            if(!miRs.next()) {
              Socios elsocio = new Socios();                 
              elsocio.setIdSocio(s.get(i).getIdSocio());
              elsocio.setNroSocio(socio);
              elsocio.setNroFam(ind);
              elsocio.setDenominacion(s.get(i).getDenominacion());
              soc.add(elsocio);
        }        
            miRs.close(); 
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }}
        return soc;
    }
    
    public int buscarAct (String Act){
    int id = 0;
    
        Connection miCnx = ConectarBD.getConnection();
        String query = "SELECT idActividades FROM actividades WHERE Codigo=?";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setString(1, Act);           
            miRs = miStm.executeQuery();        
            if(miRs.next()) {
                id = miRs.getInt("idActividades");
            }} catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        return id;
    }  
    
    public int CargarActividad(int id, int nroSocio, int nroFam, int idAct){   
        int status = 0;
        String fecha = null;
        
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date();         
        fecha = sdf.format(date);        

            String query = "INSERT INTO ActividadSocio (idsocio, NroSocio, NroFam, idActividades, FechaAlta) VALUES (?,?,?,?,?)";
            Connection miCnx = ConectarBD.getConnection();
            try {   
                PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
                miStm.setInt(1, id);
                miStm.setInt(2, nroSocio);
                miStm.setInt(3, nroFam);
                miStm.setInt(4, idAct);
                miStm.setString(5, fecha);                
                status = miStm.executeUpdate();
            } catch (SQLException ex) {
                ex.printStackTrace();
                status=3;
        }
        return status;
}  
    
    public List<Actividades> buscarActividad (int Nro){
    int id = 0;
    int edad = 0;

        List<Actividades> act = new ArrayList<Actividades>();    
        Connection miCnx = ConectarBD.getConnection();
        String query ="SELECT * FROM actividadsocio, actividades, socios where actividades.idActividades=actividadsocio.idActividades and actividadsocio.idsocio=socios.idsocios and actividadsocio.NroSocio=? order by actividadsocio.nrofam";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, Nro);           
            miRs = miStm.executeQuery();        
            while (miRs.next()) {            
              Actividades actividad = new Actividades();
              actividad.setIdSocio(miRs.getInt("idSocio"));
              actividad.setIdActividadSocio(miRs.getInt("idActividadSocio"));    
              actividad.setNroFam(miRs.getInt("NroSocio"));
              actividad.setNroFam(miRs.getInt("NroFam"));
              actividad.setIdActividad(miRs.getInt("idActividades"));
              actividad.setCodigo(miRs.getString("Codigo"));
              actividad.setDenominacion(miRs.getString("Denominacion"));
              actividad.setEstado(miRs.getString("Estado"));
              actividad.setFechaAlta(miRs.getString("FechaAlta"));              
              String fecha = miRs.getString("FechaNac");
              actividad.setFechaNac(miRs.getString("FechaNac"));

                SimpleDateFormat formatoFecha = new SimpleDateFormat("YYYY-MM-DD");
                Date nuevaFecha = null;
                try {
                    nuevaFecha = formatoFecha.parse(fecha);
                    edad = calculateAge(nuevaFecha); 
                 } catch (Exception ex) {
                 ex.printStackTrace();
                 }
                
              actividad.setEdad(edad);
              actividad.setMonto(miRs.getDouble("Monto"));
              act.add(actividad);
          }
            miRs.close();
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
       return act; 
    }     

  public int calculateAge(Date bornDate) {
    Calendar cal = Calendar.getInstance(); // current date
    int currYear = cal.get(Calendar.YEAR);
    int currMonth = cal.get(Calendar.MONTH);
    int currDay = cal.get(Calendar.DAY_OF_MONTH);
    cal.setTime(bornDate); // now born date
    int years = currYear - cal.get(Calendar.YEAR);
    int bornMonth = cal.get(Calendar.MONTH);
    if (bornMonth == currMonth) { // same month
      return cal.get(Calendar.DAY_OF_MONTH) <= currDay ? years: years - 1;
    } else {
     return bornMonth < currMonth ? years - 1 : years;
    }
 } 

public List CocherasDisp(String c){
    int i, j, cont;
    boolean valor;
        
        List lista = new ArrayList<>(); 
        List lista1 = new ArrayList();
        Connection miCnx = ConectarBD.getConnection();
        String query ="SELECT Numero FROM cochera where tipoCochera=? ";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setString(1, c);           
            miRs = miStm.executeQuery();        
       if (c.equals("Descubierta")){
         for (i=26; i<=60; i++){ 
           lista1.add(i);
         }
         while (miRs.next()) {
             valor = true;
          for (i=1; i<lista1.size() && valor; i++){  
                  if (lista1.get(i).equals(miRs.getInt("Numero"))){
                    lista1.remove(i);
                    valor = false;                    
                }
         }
       }
       }else {
         for (i=1; i<=25; i++){ 
           lista1.add(i);
         }
         while (miRs.next()) {
             valor = true;
          for (i=1; i<=lista1.size()&& valor; i++){  
               if (lista1.get(i).equals(miRs.getInt("Numero"))){
                 lista1.remove(i);
                 valor = false;                    
              }
           }
       }}}catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
               }
        this.lista = lista1;
    return lista1;
}

    public int IngresarCochera(int id, int idAct, int nroSocio, int nroFam, String TipoCoch, int Nro, String TipoVeh, String Patente, String Marca, String Modelo){   
        int status = 0;
        String fecha = null;
        String co, ve;
        int idA = 0;
        
        co = NormTipoCoch(TipoCoch);
        ve = NormTipoVeh(TipoVeh);     
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date date = new Date();         
        fecha = sdf.format(date);   
 
        Connection miCnx = ConectarBD.getConnection();
        String query = "SELECT idActividadSocio FROM actividadSocio WHERE idActividades=? and nroSocio=? and nroFam=?";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, idAct);    
            miStm.setInt(2, nroSocio);
            miStm.setInt(3, nroFam);
            miRs = miStm.executeQuery();        
            if(miRs.next()) {
               idA = miRs.getInt("idActividadSocio");
            }else {
                String query1 = "INSERT INTO ActividadSocio (idsocio, NroSocio, NroFam, idActividades) VALUES (?,?,?,?)";
                Connection miCnx1 = ConectarBD.getConnection();
                try {   
                   PreparedStatement miStm1 = (PreparedStatement) miCnx1.prepareStatement(query1);
                   miStm1.setInt(1, id);
                   miStm1.setInt(2, nroSocio);
                   miStm1.setInt(3, nroFam);
                   miStm1.setInt(4, idAct);             
                   status = miStm1.executeUpdate();
                 } catch (SQLException ex) {
                     ex.printStackTrace();
                     status=3;
                  }              
                }
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }    
 
        miCnx = ConectarBD.getConnection();
        query = "SELECT idActividadSocio FROM actividadSocio WHERE idActividades=? and nroSocio=? and nroFam=?";
        miRs = null;
        try {        
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, idAct);    
            miStm.setInt(2, nroSocio);
            miStm.setInt(3, nroFam);
            miRs = miStm.executeQuery();        
            if(miRs.next()) {
               idA = miRs.getInt("idActividadSocio");
        } }catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        } 
        
            query = "INSERT INTO Cochera (idsocio, idActividadSocio, NroSocio, NroSocioFam, FechaAltaCoch, TipoCochera, Numero, TipoAuto, Patente, Marca, Modelo) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
            miCnx = ConectarBD.getConnection();
            try {   
                PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
                miStm.setInt(1, id);
                miStm.setInt(2, idA);                
                miStm.setInt(3, nroSocio);
                miStm.setInt(4, nroFam);
                miStm.setString(5, fecha);
                miStm.setString(6, co);
                miStm.setInt(7, Nro);
                miStm.setString(8, ve);
                miStm.setString(9, Patente);
                miStm.setString(10, Marca);
                miStm.setString(11, Modelo);
                status = miStm.executeUpdate();
            } catch (SQLException ex) {
                ex.printStackTrace();
                status=3;
        }
        return status;
}

    public List<Actividades> buscarCochera (int Nro){
    int id = 0;
    int edad = 0;

        List<Actividades> cochera = new ArrayList<Actividades>();    
        Connection miCnx = ConectarBD.getConnection();
        String query ="SELECT * FROM cochera, actividadsocio, socios, actividades where actividadsocio.idActividadSocio=cochera.idActividadSocio and actividadsocio.idsocio=socios.idsocios and actividades.idActividades=actividadsocio.idActividades and cochera.NroSocio=? order by actividadsocio.nrofam";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, Nro);           
            miRs = miStm.executeQuery();        
            while (miRs.next()) {            
              Actividades coch = new Actividades();
              coch.setIdSocio(miRs.getInt("idSocio"));
              coch.setIdActividad(miRs.getInt("idActividades"));
              coch.setIdActividadSocio(miRs.getInt("idActividadSocio"));    
              coch.setNroSocio(miRs.getInt("NroSocio"));
              coch.setNroFam(miRs.getInt("NroSocioFam"));
              coch.setDenominacion(miRs.getString("Denominacion"));
              coch.setFechaAlta(miRs.getString("FechaAltaCoch"));              
              coch.setTipoCochera(miRs.getString("TipoCochera"));
              coch.setNroCohera(miRs.getString("Numero"));
              coch.setTipoVeh(miRs.getString("TipoAuto")); 
              coch.setPatente(miRs.getString("Patente"));              
              coch.setMarca(miRs.getString("Marca"));              
              coch.setModelo(miRs.getString("Modelo"));
              coch.setMonto(miRs.getDouble("Monto"));
              cochera.add(coch);
          }
            miRs.close();
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
       return cochera; 
    } 
    
     public int EliminarActividad (int id, int idAct){
        int status = 0;
        
        Connection miCnx = ConectarBD.getConnection();
        String query = "Delete FROM actividadsocio WHERE idSocio=? and idActividades=? ";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, id); 
            miStm.setInt(2, idAct);
            status = miStm.executeUpdate();
        } catch (SQLException ex) {
            status = 2;
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
       return status;
    }     

     public int EliminarActividadCoch (int id, int idAct, int idActSoc, String pat){
        int status = 0;
        int cuenta = 0;
    
        Connection miCnx = ConectarBD.getConnection();
        String query = "Select count(*) as cu From cochera where idSocio=? and idActividadSocio=? ";
        ResultSet miRs= null;
        try{
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, id); 
            miStm.setInt(2, idActSoc);
            miRs = miStm.executeQuery();
            if (miRs.next()){
               cuenta = miRs.getInt("cu");
            }
        } catch (SQLException ex) {
            status = 2;
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        if (cuenta==1){
           miCnx = ConectarBD.getConnection();        
        query = "Delete FROM actividadsocio WHERE idSocio=? and idActividades=? ";
        miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, id); 
            miStm.setInt(2, idAct);
            status = miStm.executeUpdate();
            } catch (SQLException ex) {
              status = 2;
               Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
          }}else {
            miCnx = ConectarBD.getConnection();        
            query = "Delete FROM cochera WHERE idSocio=? and idActividadSocio=? and Patente=? ";
            try {
               PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
               miStm.setInt(1, id); 
               miStm.setInt(2, idActSoc);
               miStm.setString(3, pat);
               status = miStm.executeUpdate();
            } catch (SQLException ex) {
                status = 2;
               Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
           }}
       return status;
    }     
     
     public String NormTipoVeh (String f){
       
        String tive = "";
        
        if ("1".equals(f)) {
            tive = "Sedam";
        }

        if ("2".equals(f)) {
            tive = "Utilitario";
        } 
        
 
        if ("3".equals(f)) {
            tive = "4 x 4";
        }  
 

        if ("4".equals(f)) {
            tive = "Motocicleta";
        }          
        return tive; 
    }
     
      public String NormTipoCoch (String f){
       
        String tico = "";
        
        if ("0".equals(f)) {
            tico = "Cubierta";
        }

        if ("1".equals(f)) {
            tico = "Descubierta";
        } 
         
        return tico; 
    }      
     
}
